In [1]:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
In [2]:
!rm time_series_covid19_deaths_global.csv
!rm time_series_covid19_confirmed_global.csv
!rm time_series_covid19_recovered_global.csv
!wget "https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
!wget "https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv"
!wget "https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv"
--2020-04-14 20:59:53--  https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv
Resolving github.com (github.com)... 18.231.5.6
Connecting to github.com (github.com)|18.231.5.6|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv [following]
--2020-04-14 20:59:57--  https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.216.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.216.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 69536 (68K) [text/plain]
Saving to: ‘time_series_covid19_confirmed_global.csv’

time_series_covid19 100%[===================>]  67,91K  --.-KB/s    in 0,07s   

2020-04-14 21:00:00 (950 KB/s) - ‘time_series_covid19_confirmed_global.csv’ saved [69536/69536]

--2020-04-14 21:00:00--  https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv
Resolving github.com (github.com)... 18.231.5.6
Connecting to github.com (github.com)|18.231.5.6|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv [following]
--2020-04-14 21:00:02--  https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.216.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.216.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 55726 (54K) [text/plain]
Saving to: ‘time_series_covid19_deaths_global.csv’

time_series_covid19 100%[===================>]  54,42K   315KB/s    in 0,2s    

2020-04-14 21:00:05 (315 KB/s) - ‘time_series_covid19_deaths_global.csv’ saved [55726/55726]

--2020-04-14 21:00:05--  https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv
Resolving github.com (github.com)... 18.228.52.138
Connecting to github.com (github.com)|18.228.52.138|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv [following]
--2020-04-14 21:00:07--  https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.216.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.216.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 58416 (57K) [text/plain]
Saving to: ‘time_series_covid19_recovered_global.csv’

time_series_covid19 100%[===================>]  57,05K  6,81KB/s    in 8,4s    

2020-04-14 21:00:20 (6,81 KB/s) - ‘time_series_covid19_recovered_global.csv’ saved [58416/58416]

In [3]:
df_confirmed = pd.read_csv("time_series_covid19_confirmed_global.csv").groupby("Country/Region").sum()
df_deaths = pd.read_csv("time_series_covid19_deaths_global.csv").groupby("Country/Region").sum()
df_recovered = pd.read_csv("time_series_covid19_recovered_global.csv").groupby("Country/Region").sum()
In [4]:
from sklearn.linear_model import LinearRegression

def get_confirmed(country="Argentina"):
    return np.array(df_confirmed.loc[country][2:]).astype(int)
def get_recovered(country="Argentina"):
    return np.array(df_recovered.loc[country][2:]).astype(int)
def get_deaths(country="Argentina"):
    return np.array(df_deaths.loc[country][2:]).astype(int)
def get_infected(country="Argentina"):
    return (get_confirmed(country)-get_recovered(country)-get_deaths(country))
def get_solved(country="Argentina"):
    return get_recovered(country)+get_deaths(country)
def get_countries():
    return list(df_confirmed.iloc[:,-1].sort_values(ascending=False).index)
def get_countries_confirmed():
    return df_confirmed.loc[get_countries()].iloc[:,-1].values
def get_countries_recovered():
    return df_recovered.loc[get_countries()].iloc[:,-1].values
def get_countries_deaths():
    return df_deaths.loc[get_countries()].iloc[:,-1].values
def get_countries_infected():
    return get_countries_confirmed() - get_countries_recovered() - get_countries_deaths()


def days_since_first_infected(country="Argentina"):
    return sum(get_confirmed(country)>0)
def get_exp(country="Argentina", from_last=-20, to_last=0, window_size=5, epsilon = 1e-8):
    exponents = list()
    for idx in range(from_last, to_last-window_size):
        reg=LinearRegression()
        X = get_infected(country)[idx:idx+window_size]
        if 0 not in X:
            reg.fit(np.array(range(0,window_size)).reshape(-1,1),np.log(X).reshape(-1,1))
            exponents.append(np.exp(reg.coef_[0]))
        else:
            exponents.append(1)
    return exponents
def get_dates():
    return df_confirmed.columns[4:]
def plot_stats(country="Argentina",confirmed=True, recovered=True, infected=True, deaths=True,solved=True,window_size=5):
    dsfi = days_since_first_infected(country)
    plt.figure(figsize=[18,12])
    if confirmed:
        plt.plot(get_confirmed(country)[-dsfi-1:],label=f"Confirmed. Current: {get_confirmed(country)[-1]}")
    if recovered:
        plt.plot(get_recovered(country)[-dsfi-1:],label=f"Recovered. Current: {get_recovered(country)[-1]}")
    if deaths:
        plt.plot(get_deaths(country)[-dsfi-1:],label=f"Deceased. Current: {get_deaths(country)[-1]}")
    if infected:
        plt.plot(get_infected(country)[-dsfi-1:],label=f"Infected. Current: {get_infected(country)[-1]}")
    if solved:
        plt.plot(get_solved(country)[-dsfi-1:],label=f"solved. Current: {get_solved(country)[-1]}")
    plt.legend()
    plt.grid()
    ax=plt.gca()
    ax=ax.twinx()
    ax.plot(range(window_size-1,dsfi-1),get_exp(country,from_last=-dsfi,window_size=window_size),"--", color="k", label = f"factor de crecimiento. Current: {get_exp(country,from_last=-dsfi,window_size=window_size)[-1]}")
    ax.plot([0,dsfi-1],[1,1],"--")
    ax.plot([0,dsfi-1],[0,0],"-.")
    flen=5
    delta_delta_amp = 2.5
    infected = get_infected(country)[-dsfi-1:]
    infected_dif = np.correlate(np.diff(infected,prepend=infected[0]),[1/flen for i in range(flen)],mode='valid')
    infected_dif_dif = np.correlate(np.diff(infected_dif,prepend=infected_dif[0]),[2.5/flen for i in range(flen)],mode='valid')
    ax.plot(infected_dif/max(infected_dif),"--", label="diff")
    ax.plot(infected_dif_dif/max(infected_dif),"--", label="diff diff")
    plt.legend()
    plt.show()
In [5]:
plot_stats("Brazil",window_size=5)
In [6]:
countries =get_countries()
In [7]:
plt.figure(figsize=[32,12])
plt.bar(countries[:30], get_countries_confirmed()[:30],label="confirmed")
plt.bar(countries[:30], get_countries_recovered()[:30],label="recovered")
plt.bar(countries[:30], get_countries_deaths()[:30],label="deaths")
plt.legend()
plt.xticks(rotation=90)
plt.show()
plt.figure(figsize=[32,12])
plt.bar(countries[:30], get_countries_infected()[:30],color="red",label="infected")
plt.legend()
plt.xticks(rotation=90)
plt.show()
In [8]:
get_exp("China")
Out[8]:
[array([0.91132764]),
 array([0.9164745]),
 array([0.92515231]),
 array([0.94202948]),
 array([0.95256323]),
 array([0.95300127]),
 array([0.94083469]),
 array([0.93948621]),
 array([0.94857801]),
 array([0.96155147]),
 array([0.97438905]),
 array([0.9727934]),
 array([0.97615196]),
 array([0.98869555]),
 array([0.99747662])]
In [9]:
plot_stats("Argentina", window_size=3)
In [10]:
for country in countries:
    dsfi = days_since_first_infected(country)
    print(f"Days since first infected for {country}: {dsfi}")
    plot_stats(country)
    plt.show()
    
Days since first infected for US: 84
Days since first infected for Spain: 74
Days since first infected for Italy: 75
Days since first infected for France: 82
Days since first infected for Germany: 79
Days since first infected for United Kingdom: 75
Days since first infected for China: 84
Days since first infected for Iran: 56
Days since first infected for Turkey: 35
Days since first infected for Belgium: 71
Days since first infected for Netherlands: 48
Days since first infected for Canada: 80
Days since first infected for Switzerland: 50
Days since first infected for Brazil: 49
Days since first infected for Russia: 75
Days since first infected for Portugal: 44
Days since first infected for Austria: 50
Days since first infected for Israel: 54
Days since first infected for India: 76
Days since first infected for Ireland: 46
Days since first infected for Sweden: 75
Days since first infected for Korea, South: 84
Days since first infected for Peru: 40
Days since first infected for Chile: 43
Days since first infected for Japan: 84
Days since first infected for Ecuador: 45
Days since first infected for Poland: 42
Days since first infected for Romania: 49
Days since first infected for Denmark: 48
Days since first infected for Norway: 49
Days since first infected for Australia: 80
Days since first infected for Czechia: 45
Days since first infected for Pakistan: 49
Days since first infected for Saudi Arabia: 44
Days since first infected for Philippines: 76
Days since first infected for Mexico: 47
Days since first infected for Malaysia: 81
Days since first infected for United Arab Emirates: 77
Days since first infected for Indonesia: 44
Days since first infected for Serbia: 40
Days since first infected for Panama: 36
Days since first infected for Qatar: 46
Days since first infected for Ukraine: 43
Days since first infected for Luxembourg: 46
Days since first infected for Dominican Republic: 45
Days since first infected for Belarus: 47
Days since first infected for Singapore: 83
Days since first infected for Finland: 77
Days since first infected for Colombia: 40
Days since first infected for Thailand: 84
Days since first infected for South Africa: 41
Days since first infected for Egypt: 61
Days since first infected for Argentina: 43
Days since first infected for Greece: 49
Days since first infected for Algeria: 50
Days since first infected for Moldova: 38
Days since first infected for Morocco: 44
Days since first infected for Iceland: 47
Days since first infected for Croatia: 50
Days since first infected for Bahrain: 51
Days since first infected for Hungary: 42
Days since first infected for Iraq: 51
Days since first infected for Estonia: 48
Days since first infected for New Zealand: 47
Days since first infected for Kuwait: 51
Days since first infected for Kazakhstan: 33
Days since first infected for Slovenia: 41
Days since first infected for Azerbaijan: 45
Days since first infected for Uzbekistan: 31
Days since first infected for Bosnia and Herzegovina: 41
Days since first infected for Lithuania: 47
Days since first infected for Armenia: 45
Days since first infected for Bangladesh: 38
Days since first infected for North Macedonia: 49
Days since first infected for Cameroon: 40
Days since first infected for Slovakia: 40
Days since first infected for Oman: 51
Days since first infected for Cuba: 34
Days since first infected for Tunisia: 42
Days since first infected for Afghanistan: 51
Days since first infected for Bulgaria: 38
Days since first infected for Diamond Princess: 68
Days since first infected for Cyprus: 37
Days since first infected for Andorra: 44
Days since first infected for Latvia: 44
Days since first infected for Lebanon: 54
Days since first infected for Cote d'Ivoire: 35
Days since first infected for Ghana: 32
Days since first infected for Costa Rica: 40
Days since first infected for Niger: 26
Days since first infected for Burkina Faso: 36
Days since first infected for Uruguay: 32
Days since first infected for Albania: 37
Days since first infected for Kyrgyzstan: 28
Days since first infected for Honduras: 35
Days since first infected for Jordan: 43
Days since first infected for Malta: 39
Days since first infected for Taiwan*: 84
Days since first infected for Kosovo: 20
Days since first infected for Nigeria: 47
Days since first infected for San Marino: 48
Days since first infected for Guinea: 33
Days since first infected for Djibouti: 28
Days since first infected for Bolivia: 35
Days since first infected for Mauritius: 28
Days since first infected for West Bank and Gaza: 41
Days since first infected for Georgia: 49
Days since first infected for Senegal: 44
Days since first infected for Montenegro: 29
Days since first infected for Vietnam: 83
Days since first infected for Congo (Kinshasa): 35
Days since first infected for Sri Lanka: 79
Days since first infected for Kenya: 33
Days since first infected for Venezuela: 32
Days since first infected for Guatemala: 32
Days since first infected for Paraguay: 38
Days since first infected for El Salvador: 27
Days since first infected for Mali: 21
Days since first infected for Brunei: 37
Days since first infected for Rwanda: 32
Days since first infected for Cambodia: 79
Days since first infected for Trinidad and Tobago: 32
Days since first infected for Madagascar: 26
Days since first infected for Monaco: 46
Days since first infected for Ethiopia: 33
Days since first infected for Liechtenstein: 42
Days since first infected for Togo: 40
Days since first infected for Jamaica: 35
Days since first infected for Barbados: 29
Days since first infected for Burma: 19
Days since first infected for Congo (Brazzaville): 31
Days since first infected for Somalia: 30
Days since first infected for Liberia: 30
Days since first infected for Gabon: 32
Days since first infected for Uganda: 25
Days since first infected for Tanzania: 30
Days since first infected for Bahamas: 30
Days since first infected for Guyana: 34
Days since first infected for Zambia: 28
Days since first infected for Equatorial Guinea: 31
Days since first infected for Haiti: 26
Days since first infected for Guinea-Bissau: 21
Days since first infected for Libya: 22
Days since first infected for Benin: 30
Days since first infected for Eritrea: 25
Days since first infected for Sudan: 33
Days since first infected for Mongolia: 36
Days since first infected for Syria: 24
Days since first infected for Mozambique: 24
Days since first infected for Antigua and Barbuda: 33
Days since first infected for Chad: 27
Days since first infected for Maldives: 38
Days since first infected for Laos: 22
Days since first infected for Angola: 26
Days since first infected for Belize: 23
Days since first infected for Zimbabwe: 26
Days since first infected for Malawi: 13
Days since first infected for Fiji: 27
Days since first infected for Dominica: 24
Days since first infected for Namibia: 32
Days since first infected for Nepal: 81
Days since first infected for Eswatini: 32
Days since first infected for Saint Lucia: 32
Days since first infected for Grenada: 24
Days since first infected for Saint Kitts and Nevis: 21
Days since first infected for Botswana: 16
Days since first infected for Saint Vincent and the Grenadines: 32
Days since first infected for Central African Republic: 31
Days since first infected for Seychelles: 32
Days since first infected for Cabo Verde: 26
Days since first infected for Sierra Leone: 15
Days since first infected for Suriname: 32
Days since first infected for MS Zaandam: 18
Days since first infected for Gambia: 29
Days since first infected for Nicaragua: 27
Days since first infected for Holy See: 40
Days since first infected for Mauritania: 32
Days since first infected for Timor-Leste: 24
Days since first infected for Western Sahara: 10
Days since first infected for Burundi: 15
Days since first infected for Bhutan: 40
Days since first infected for South Sudan: 10
Days since first infected for Sao Tome and Principe: 9
Days since first infected for Papua New Guinea: 26
Days since first infected for Yemen: 5
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-10-32524388aef3> in <module>
      2     dsfi = days_since_first_infected(country)
      3     print(f"Days since first infected for {country}: {dsfi}")
----> 4     plot_stats(country)
      5     plt.show()
      6 

<ipython-input-4-696c427e1852> in plot_stats(country, confirmed, recovered, infected, deaths, solved, window_size)
     55     ax=plt.gca()
     56     ax=ax.twinx()
---> 57     ax.plot(range(window_size-1,dsfi-1),get_exp(country,from_last=-dsfi,window_size=window_size),"--", color="k", label = f"factor de crecimiento. Current: {get_exp(country,from_last=-dsfi,window_size=window_size)[-1]}")
     58     ax.plot([0,dsfi-1],[1,1],"--")
     59     ax.plot([0,dsfi-1],[0,0],"-.")

IndexError: list index out of range
In [ ]: